package vetxsoft.bean;

import java.io.Serializable;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import vetxsoft.entity.Cliente;
import vetxsoft.entity.Especie;
import vetxsoft.entity.Mascota;
import vetxsoft.system.IVetexsoftSystem;

/**
 *
 * @author Fary Hurtado <hurtadofary@gmail.com>
 */
@ManagedBean
@SessionScoped
public class MascotaBean implements Serializable {

    @EJB
    private IVetexsoftSystem vetexsoftSystem;
    private Mascota mascota = new Mascota();
    private Especie especie = new Especie();
    private Date currentDate = new Date();
    private boolean stored = false;

    public MascotaBean() {
    }

    public Mascota getMascota() {
        return mascota;
    }

    public void setMascota(Mascota mascota) {
        this.mascota = mascota;
    }

    public Date getCurrentDate() {
        return currentDate;
    }

    public List<String> sexos() {

        LinkedList<String> sexos = new LinkedList<String>();

        sexos.add("Macho");
        sexos.add("Hembra");

        return sexos;
    }

    public List<Mascota> mascotas() {
        try {

            return this.vetexsoftSystem.obtenerMascotas();

        } catch (Exception ex) {

            return null;
        }
    }

    public boolean isStored() {
        return stored;
    }

    public void setStored(boolean stored) {
        this.stored = stored;
    }

    public Especie getEspecie() {
        return especie;
    }

    public void setEspecie(Especie especie) {
        this.especie = especie;
    }

    public IVetexsoftSystem getVetexsoftSystem() {
        return vetexsoftSystem;
    }

    public void cancelSelection() {

        this.mascota.setCedCliente(null);
    }

    public void cancelAction() {

        this.mascota = new Mascota();
        this.especie = new Especie();
        this.stored = false;
    }

    public void saveAction() {
        try {

            if (this.mascota.getCedCliente() == null) {
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Debes seleccionar un cliente.", ""));
                return;
            }

            this.mascota.setStored(this.stored);

            this.vetexsoftSystem.saveMascota(mascota);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "La mascota ha sido registrada satisfactoriamente.", ""));

            this.mascota = new Mascota();
            this.especie = new Especie();
            this.stored = false;


        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido registrar la mascota. Por favor, vuelva a intentarlo.", ""));
        }
    }

    public void removeAction(Mascota mascotaToDelete) {
        try {

            if (!mascotaToDelete.getHistoriaClinicaList().isEmpty()) {

                mascotaToDelete = new Mascota();
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar la mascota debido a que existen registros asociados a el. Por favor, vuelva a intentarlo.", ""));
                return;
            }
            if (mascotaToDelete.getHistoriaClinicaList() == null) {

                mascotaToDelete = new Mascota();
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar la mascota debido a que existen registros asociados a el. Por favor, vuelva a intentarlo.", ""));
                return;
            }

            this.vetexsoftSystem.removeMascota(this.mascota);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "La mascota ha sido eliminada satisfactoriamente.", ""));

            mascotaToDelete = new Mascota();
            this.stored = false;

        } catch (Exception ex) {
            mascotaToDelete = new Mascota();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar la mascota. Por favor, vuelva a intentarlo.", ""));
        }
    }
}
